import DateTimeUtil from "@/util/DateTimeUtil.ts";

/**
 * 日志记录器
 */
export default class Logger{
    private readonly target: string;
    constructor(target: string) {
        this.target = target
    }

    empty(){ /* empty */ }

    /**
     * 打印跟踪日志信息,打印调用者堆栈信息
     * @param msg 日志信息说明
     * @param data 日志信息数据
     */
    tract(msg: string, ...data: any[]){
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        console.debug("%c" + DateTimeUtil.currentDateTimeWithMillis() + " [TRACE] " + this.target, "color: #555", "：",msg, ...data);
    }

    /**
     * 打印开发日志
     * @param msg 日志信息说明
     * @param data 日志信息数据
     */
    debug(msg: string, ...data: any[]){
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        console.debug("%c" + DateTimeUtil.currentDateTimeWithMillis() + " [DEBUG] " + this.target , "color: #20B2AA", "：",msg, ...data);
    }

    /**
     * 打印info日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    info(msg: string, ...data: any[]) {
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        console.info("%c" +  DateTimeUtil.currentDateTimeWithMillis() + " [INFO] " + this.target, "color: #228B22","：", msg, ...data);
    }

    /**
     * 打印警告日志信息
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    warn(msg: string, ...data: any[]) {
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        console.warn(DateTimeUtil.currentDateTimeWithMillis() + " [WARN] " + this.target + " ：", msg, ...data);
    }

    /**
     * 打印错误日志信息
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    error(msg: string | object, ...data: any[]) {
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        console.error(DateTimeUtil.currentDateTimeWithMillis() + " [ERROR] " + this.target + " ：", msg, ...data);
    }
}